package utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletContext;

import org.apache.commons.io.CopyUtils;
import org.apache.commons.io.IOUtils;
import org.apache.struts.upload.FormFile;

/**
 * 文件操作的工具类
 * @author liwp.
 */
public class HuaXiaFileUtils {
    /**
     * 执行上传.
     * @param formFile FormFile.
     * @param saveFileName String.
     */
    public static void saveUploadFile(FormFile formFile, String saveFileName) {
        InputStream streamIn = null;
        OutputStream streamOut = null;
        try {
            streamIn = formFile.getInputStream();
            streamOut = new FileOutputStream(new File(saveFileName));
            // 通过common-io中的实用类FileUtils来代替流读写.
            CopyUtils.copy(streamIn, streamOut);

        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            IOUtils.closeQuietly(streamIn);
            IOUtils.closeQuietly(streamOut);
        }
    }

    /**
     * 取得文件的绝对路径(为了区分web相对路径与操作系统的绝对文件路径,我们规定如下:
     * 如果这个值为'//'开始的字符串，表明这个路径是一个操作系统规定的绝对路径，比如//D:/data/images
     * 或者///local/home/images，否则，表明这是一个web下的相对路径,比如/data/images .*
     * @param pFileName file/path
     * @param servletCtx servletCtx
     * @return String 绝对路径
     */
    public static String getRealFileName(ServletContext servletCtx,
            String pFileName) {
        String fileName = pFileName;
        if (fileName.startsWith("//")) {
            fileName = fileName.substring("//".length());
        } else {// web 相对路径
            if (fileName.charAt(0) != '/') {
                fileName = "/" + fileName;
            }
            fileName = servletCtx.getRealPath(fileName);

        }
        return fileName;
    }

}
